#include "widget.h"
#include "ui_widget.h"


// 带参数的信号槽：
// 当信号带有参数的时候，槽函数的参数必须与信号的参数一致
// 发射信号的时候，就可以给信号函数传递实参，有与之对应的这个参数就会被传递到对应的槽函数中
// 此时 就可以起到 让信号给槽传参的效果

// 信号与槽函数 参数必须要一致是指：
// 一致主要是要求类型相同，
// 个数不一致也可以，但是信号函数的参数个数 要比 槽函数的参数更多
// 信号函数的参数个数 少于 槽函数的参数个数， 此时的代码无法编译通过
// 成因：一个槽函数可以绑定多个信号

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 将自定义信号和槽函数先链接
    connect(this , &Widget :: MySignal , this , &Widget :: handleMysiganl);
    emit MySignal("带参数的信号槽");

    connect(this , &Widget :: MySignal_2 , this , &Widget :: handleMysiganl);
}

Widget::~Widget()
{
    delete ui;
}

// 传参可以起到复用代码的效果
// 有多个逻辑，并且逻辑上整体一致，但是涉及的数据不同
// 就可以通过函数-参数来复用代码，并且在不同的场景传入参数即可
void Widget::handleMysiganl(const QString &text)
{
    this->setWindowTitle(text);
}

void Widget::on_pushButton_clicked()
{
    emit MySignal_2("按钮触发标题1" , " ");
}


void Widget::on_pushButton_2_clicked()
{
    emit MySignal("按钮触发标题2");
}

